//package com.vast.admin.service.impl;
//
//import cn.hutool.core.date.DateTime;
//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
//import com.baomidou.mybatisplus.core.metadata.IPage;
//import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
//import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
//import com.vast.admin.entity.Company;
//import com.vast.admin.entity.Dept;
//import com.vast.admin.entity.ManagerRole;
//import com.vast.common.core.domain.entity.SysRole;
//import com.vast.admin.entity.enums.OperatorEum;
//import com.vast.admin.entity.enums.QueryOrderEnum;
//import com.vast.admin.mapper.ManagerMapper;
//import com.vast.admin.service.DeptService;
//import com.vast.admin.service.ManagerCompanyDataService;
//import com.vast.admin.service.ManagerRoleService;
//import com.vast.admin.service.RoleService;
//import com.vast.admin.utils.QueryBuilder;
//import com.vast.admin.utils.TableFieldColumnsUtils;
//import com.vast.common.core.domain.entity.SysUser;
//import com.vast.common.constant.MessageCode;
//import com.vast.system.core.constant.UserConstants;
//import com.vast.system.exception.BusinessException;
//import com.vast.system.service.ISysUserService;
//import com.vast.system.shiro.ShiroUtils;
//import com.vast.system.utils.Constant;
//import com.vast.system.utils.StringUtils;
//import org.apache.commons.lang3.RandomStringUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//
//import java.util.ArrayList;
//import java.util.Arrays;
//import java.util.List;
//import java.util.Map;
//
//@Service
//public class ManagerServiceImpl extends ServiceImpl<ManagerMapper, SysUser> implements ISysUserService {
//
//    @Autowired
//    private ManagerRoleService managerRoleService;
//
//    @Autowired
//    private ISysRoleService roleService;
//
//    @Autowired
//    private CompanyService companyService;
//
//    @Autowired
//    private ManagerCompanyDataService managerCompanyDataService;
//
//    @Autowired
//    private DeptService deptService;
//
//    @Override
//    public SysUser getManagerInfoById(String userId) {
//        if(userId != null && !userId.isEmpty()){
//            SysUser manager = baseMapper.selectById(userId);
//            if(manager != null){
//                List<ManagerRole> managerRoles = managerRoleService.list(new QueryWrapper<ManagerRole>().eq(ManagerRole.COL_MANAGER_ID,manager.getUserId()));
//                List<Long> roleIds = new ArrayList<>();
//                for (ManagerRole managerRole : managerRoles) {
//                    roleIds.add(managerRole.getRoleId());
//                }
//                Long[] roleIdArr = new Long[roleIds.size()];
//                roleIds.toArray(roleIdArr);
//                manager.setRoles((List<SysRole>) roleService.listByIds(roleIds));
//                manager.setRoleIdList(roleIdArr);
//                if (!Arrays.asList(manager.getRoleIdList()).contains(Constant.SUPER_ADMIN)) {//超级管理员
//                    if (manager.getCompanyId() != null && manager.getCompanyId() > 0) {
//                        Company company = companyService.getById(manager.getCompanyId());
//                        if (company != null) {
//                            manager.setCompanyName(company.getName());
//                        }
//                    }
//                } else {
//                    manager.setCompanyName("系统管理");
//                }
//                return manager;
//            }
//        }
//        return null;
//    }
//
//    @Override
//    public SysUser login(String account, String password) {
//        QueryWrapper<SysUser> queryWrapper = new QueryWrapper<>();
//        queryWrapper.eq(SysUser.COL_ACCOUNT, account);
//        queryWrapper.eq(SysUser.COL_PASSWORD, password);
//
//        SysUser manager = baseMapper.selectOne(queryWrapper);
//        List<ManagerRole> managerRoles = managerRoleService.list(new QueryWrapper<ManagerRole>().eq(ManagerRole.COL_MANAGER_ID,manager.getUserId()));
//        List<Long> roleIds = new ArrayList<>();
//        for (ManagerRole managerRole : managerRoles) {
//            roleIds.add(managerRole.getRoleId());
//        }
//        Long[] roleIdArr = new Long[roleIds.size()];
//        roleIds.toArray(roleIdArr);
//        manager.setRoleIdList(roleIdArr);
//        if (!Arrays.asList(manager.getRoleIdList()).contains(Constant.SUPER_ADMIN)) {//超级管理员
//            if (manager.getCompanyId() != null && manager.getCompanyId() > 0) {
//                Company company = companyService.getById(manager.getCompanyId());
//                if (company != null) {
//                    manager.setCompanyName(company.getName());
//                }
//            }
//
//        } else {
//            manager.setCompanyName("系统管理");
//        }
//
//        return manager;
//    }
//
//    @Override
//    public int checkAccount(String account) {
//        QueryWrapper<SysUser> queryWrapper = new QueryWrapper<>();
//        queryWrapper.eq(SysUser.COL_ACCOUNT, account);
//        return baseMapper.selectCount(queryWrapper);
//    }
//
//    @Override
//    public IPage<SysUser> queryList(SysUser manager, Page<SysUser> page, boolean listMode, String queryItems, String orderField, QueryOrderEnum order) {
//        QueryWrapper<SysUser> queryWrapper = new QueryWrapper<>();
//        Map<String, String> fieldColumns = TableFieldColumnsUtils.getInstance().getFieldTableColumns(SysUser.class);
//        if (listMode) {
//            // size 小于 0 不在查询 total 及分页，自动调整为列表模式。
//            // 注意！！这个地方自己控制好！！
//            page.setSize(-1);
//        }
//        if (!StringUtils.isEmpty(queryItems)) {
//            List<QueryBuilder> queryBuilders = new ArrayList<>();
//            String[] queryItemArr = queryItems.split(";");
//            if (queryItemArr.length > 0) {
//                for (String queryItemStr : queryItemArr) {
//                    String[] itemArr = queryItemStr.split(",");
//                    if (itemArr.length == 3) {
//                        String as = itemArr[1];
//                        String params = itemArr[2];
//                        if (!StringUtils.isEmpty(params)) {
//                            queryBuilders.add(new QueryBuilder(itemArr[0], OperatorEum.valueOf(as), itemArr[2]));
//                        }
//                    }
//                }
//            }
//
//            for (QueryBuilder queryBuilder : queryBuilders) {
//                //查询字段
//                String field = queryBuilder.getField();
//                //查询参数值
//                String params = queryBuilder.getParams();
//                if (fieldColumns.containsKey(field) && !StringUtils.isEmpty(params)) {
//                    //表属性
//                    String tableColumn = fieldColumns.get(field);
//                    if (queryBuilder.getAs() == OperatorEum.EQ) {
//                        queryWrapper.eq(tableColumn, params);
//                    } else if (queryBuilder.getAs() == OperatorEum.LIKE) {
//                        queryWrapper.like(tableColumn, params);
//                    } else if (queryBuilder.getAs() == OperatorEum.LIKELEFT) {
//                        queryWrapper.likeLeft(tableColumn, params);
//                    } else if (queryBuilder.getAs() == OperatorEum.LIKERIGHT) {
//                        queryWrapper.likeRight(tableColumn, params);
//                    } else if (queryBuilder.getAs() == OperatorEum.GE) {
//                        queryWrapper.ge(tableColumn, params);
//                    } else if (queryBuilder.getAs() == OperatorEum.LE) {
//                        queryWrapper.le(tableColumn, params);
//                    }
//                }
//            }
//        }
//
//        if (!Arrays.asList(manager.getRoleIdList()).contains(Constant.SUPER_ADMIN)) {//超级管理员
//            queryWrapper.eq(SysUser.COL_COMPANY_ID, manager.getCompanyId());
//        }
//
//        if (!StringUtils.isEmpty(orderField)) {
//            String[] orderByColumns = orderField.split(",");
//            String queryOrderByColumns = "";
//            if (orderByColumns.length > 0) {
//                StringBuilder sb = new StringBuilder();
//                for (String orderByColumn : orderByColumns) {
//                    if (fieldColumns.containsKey(orderByColumn)) {
//                        sb.append(fieldColumns.get(orderByColumn)).append(",");
//                    }
//                }
//                if (sb.length() > 0) {
//                    queryOrderByColumns = sb.deleteCharAt(sb.length() - 1).toString();
//                }
//            }
//            if (!StringUtils.isEmpty(queryOrderByColumns)) {
//                if (order == null) {
//                    order = QueryOrderEnum.ASC;
//                }
//                if (order == QueryOrderEnum.ASC) {
//                    queryWrapper.orderByAsc(queryOrderByColumns);
//                } else if (order == QueryOrderEnum.DESC) {
//                    queryWrapper.orderByDesc(queryOrderByColumns);
//                }
//            }
//        }
//
//        IPage<SysUser> pageData = baseMapper.selectPage(page, queryWrapper);
//        if (pageData != null && !pageData.getRecords().isEmpty()) {
//            for (SysUser record : pageData.getRecords()) {
//                List<ManagerRole> managerRoles = managerRoleService.list(new QueryWrapper<ManagerRole>().eq(ManagerRole.COL_MANAGER_ID,record.getId()));
//                List<Long> roleIds = new ArrayList<>();
//                for (ManagerRole managerRole : managerRoles) {
//                    roleIds.add(managerRole.getRoleId());
//                }
//                Long[] roleIdArr = new Long[roleIds.size()];
//                roleIds.toArray(roleIdArr);
//                record.setRoleIdList(roleIdArr);
//                if (!Arrays.asList(record.getRoleIdList()).contains(Constant.SUPER_ADMIN)) {
//                    //企业信息
//                    if (record.getCompanyId() != null && record.getCompanyId()>0) {
//                        Company company = companyService.getById(record.getCompanyId());
//                        if (company != null) {
//                            record.setCompanyName(company.getName());
//                        }
//                    }
////                    List<ManagerRole> managerRoles = managerRoleService.list(new QueryWrapper<ManagerRole>().eq(ManagerRole.COL_MANAGER_ID,record.getId()));
//                    if(managerRoles!= null && !managerRoles.isEmpty()){
////                        List<Long> roleIds = new ArrayList<>();
////                        for (ManagerRole managerRole : managerRoles) {
////                            roleIds.add(managerRole.getRoleId());
////                        }
//                        List<SysRole> roleList = (List<SysRole>) roleService.listByIds(roleIds);
//                        if(roleList!= null && !roleList.isEmpty()){
//                            StringBuilder roleNames = new StringBuilder();
//                            for (SysRole role : roleList) {
//                                roleNames.append(role.getName()).append(",");
//                            }
//                            if(roleNames.length() >0){
//                                roleNames.deleteCharAt(roleNames.lastIndexOf(","));
//                            }
//                           record.setRoleNames(roleNames.toString());
//                        }
//                    }
//
//                } else {
//                    record.setCompanyName("超级管理员");
//                    record.setRoleNames("超级管理员");
//                }
//            }
//        }
//        return pageData;
//    }
//
//    @Override
//    public boolean addOrUpdate(SysUser manager, SysUser newManager) {
//        if (newManager.getId() == null) {
//            if (UserConstants.NOT_UNIQUE.equals(checkAccountUnique(newManager.getAccount()))){
//                throw new BusinessException(MessageCode.ERROR,"新增用户'" + newManager.getName() + "'失败，登录账号已存在");
//            }
//            //sha256加密
//            String salt = RandomStringUtils.randomAlphanumeric(20);
//            newManager.setSalt(salt);
//            newManager.setPassword(ShiroUtils.sha256(newManager.getPassword(), newManager.getSalt()));
//            if(newManager.getDeptId()!=null && newManager.getDeptId() > 0){
//                Dept dept = deptService.getById(newManager.getDeptId());
//                newManager.setCompanyId(dept.getCompanyId());
//            }else{
//                newManager.setCompanyId(manager.getCompanyId());
//            }
//            newManager.setCreateBy(manager.getUserId());
//            newManager.setUpdateBy(manager.getUserId());
//            newManager.setCreateTime(DateTime.now());
//            newManager.setUpdateTime(DateTime.now());
//            newManager.setValid(1);
//            baseMapper.insert(newManager);
//            Long[] menuIdList = newManager.getRoleIdList();
//            List<ManagerRole> managerRoles = new ArrayList<>();
//            if (menuIdList != null && menuIdList.length > 0) {
//                for (Long mId : menuIdList) {
//                    ManagerRole managerRole = new ManagerRole();
//                    managerRole.setCreateBy(manager.getUserId());
//                    managerRole.setUpdateBy(manager.getUserId());
//                    managerRole.setCreateTime(DateTime.now());
//                    managerRole.setUpdateTime(DateTime.now());
//                    managerRole.setRoleId(newManager.getId());
//                    managerRole.setRoleId(mId);
//                    managerRole.setManagerId(newManager.getId());
//                    managerRoles.add(managerRole);
//                }
//            }
//            if(newManager.getCompanyDataList() != null){
//                managerCompanyDataService.save(newManager.getId(), newManager.getCompanyDataList());
//            }
//
//            return managerRoleService.saveBatch(managerRoles);
//        } else {
//            SysUser existManager = baseMapper.selectById(newManager.getId());
//            if(existManager != null){
//                existManager.setDeptId(newManager.getDeptId());
//                existManager.setCompanyId(newManager.getCompanyId());
//                existManager.setName(newManager.getName());
//                existManager.setRoleIdList(newManager.getRoleIdList());
//                existManager.setAccount(newManager.getAccount());
//                existManager.setMobile(newManager.getMobile());
//                existManager.setRemark(newManager.getRemark());
//                existManager.setStatus(newManager.getStatus());
//                existManager.setUpdateBy(manager.getUserId());
//                existManager.setUpdateTime(DateTime.now());
//                existManager.setValid(1);
//                baseMapper.updateById(existManager);
//                boolean flag = managerRoleService.remove(new QueryWrapper<ManagerRole>().eq(ManagerRole.COL_MANAGER_ID, existManager.getId()));
//                if (!flag) {
//                    return false;
//                }
//                Long[] roleIdList = existManager.getRoleIdList();
//                List<ManagerRole> managerRoles = new ArrayList<>();
//                if (roleIdList != null && roleIdList.length > 0) {
//                    for (Long mId : roleIdList) {
//                        ManagerRole managerRole = new ManagerRole();
//                        managerRole.setCreateBy(manager.getUserId());
//                        managerRole.setUpdateBy(manager.getUserId());
//                        managerRole.setCreateTime(DateTime.now());
//                        managerRole.setUpdateTime(DateTime.now());
//                        managerRole.setRoleId(newManager.getId());
//                        managerRole.setRoleId(mId);
//                        managerRole.setManagerId(newManager.getId());
//                        managerRoles.add(managerRole);
//                    }
//                }
//                if(newManager.getCompanyDataList() != null){
//                    managerCompanyDataService.save(newManager.getId(), newManager.getCompanyDataList());
//                }
//                return managerRoleService.saveBatch(managerRoles);
//            }else{
//                return false;
//            }
//
//        }
//    }
//
//    @Override
//    public boolean delete(SysUser manager, Long[] ids) {
//        List<Long> idsList = java.util.Arrays.asList(ids);
//        int count = baseMapper.deleteBatchIds(idsList);
//        return count == ids.length;
//    }
//
//    @Override
//    public SysUser info(SysUser manager, Long id) {
//        SysUser managerInfo = baseMapper.selectById(id);
//        if (managerInfo != null) {
//            QueryWrapper<ManagerRole> managerRoleQueryWrapper = new QueryWrapper<>();
//            managerRoleQueryWrapper.eq(ManagerRole.COL_MANAGER_ID, managerInfo.getId());
//            List<ManagerRole> managerRoles = managerRoleService.list(managerRoleQueryWrapper);
//            if(managerRoles!= null && !managerRoles.isEmpty()){
//                List<Long> roleIds = new ArrayList<>();
//                for (ManagerRole managerRole : managerRoles) {
//                    roleIds.add(managerRole.getRoleId());
//                }
//                Long[] roleIdArr = new Long[roleIds.size()];
//                roleIds.toArray(roleIdArr);
//                managerInfo.setRoleIdList(roleIdArr);
//                List<SysRole> roleList = (List<SysRole>) roleService.listByIds(roleIds);
//                if(roleList!= null && !roleList.isEmpty()){
//                    StringBuilder roleNames = new StringBuilder();
//                    for (SysRole role : roleList) {
//                        roleNames.append(role.getName()).append(",");
//                    }
//                    if(roleNames.length() >0){
//                        roleNames.deleteCharAt(roleNames.lastIndexOf(","));
//                    }
//                    managerInfo.setRoleNames(roleNames.toString());
//                }
//            }
//
//            if (!Arrays.asList(manager.getRoleIdList()).contains(Constant.SUPER_ADMIN)) {//超级管理员
//                if (managerInfo.getCompanyId() != null && managerInfo.getCompanyId() > 0) {
//                    Company company = companyService.getById(managerInfo.getCompanyId());
//                    if (company != null) {
//                        managerInfo.setCompanyName(company.getName());
//                    }
//                }
//
//
//            } else {
//                managerInfo.setCompanyName("系统管理");
//            }
//            managerInfo.setCompanyDataList(managerCompanyDataService.getByManagerId(id));
//        }
//        return managerInfo;
//    }
//
//    @Override
//    public boolean updatePassword(Long id, String password, String newPassword) {
//        SysUser userEntity = baseMapper.selectById(id);
//        userEntity.setPassword(newPassword);
//        userEntity.setUpdateTime(DateTime.now());
//        return baseMapper.updateById(userEntity) > 0;
//    }
//
//    /**
//     * 根据条件分页查询用户列表
//     *
//     * @param manager 用户信息
//     * @return 用户信息集合信息
//     */
//    @Override
//    public IPage<SysUser> selectManagerList(Page<SysUser> page, SysUser manager) {
//        return baseMapper.selectManagerList(page, manager);
//    }
//
//    /**
//     * 批量删除用户信息
//     *
//     * @param userIds 需要删除的用户ID
//     * @return 结果
//     */
//    @Override
//    public int deleteUserByIds(Long[] userIds)
//    {
//        for (Long userId : userIds)
//        {
//            SysUser manager = new SysUser();
//            manager.setId(userId);
//            checkUserAllowed(manager);
//        }
//        return baseMapper.deleteBatchIds(Arrays.asList(userIds));
//    }
//
//
//    /**
//     * 校验用户是否允许操作
//     *
//     * @param user 用户信息
//     */
//    @Override
//    public void checkUserAllowed(SysUser user)
//    {
//        if (StringUtils.isNotNull(user.getId()) && user.isAdmin())
//        {
//            throw new BusinessException("不允许操作超级管理员用户");
//        }
//    }
//
//    @Override
//    public int resetPwd(SysUser user) {
//        return  baseMapper.updateById(user);
//    }
//
//    @Override
//    public String checkAccountUnique(String account) {
//        int count = baseMapper.selectList(new QueryWrapper<SysUser>().eq(SysUser.COL_ACCOUNT,account)).size();
//        if (count > 0)
//        {
//            return UserConstants.NOT_UNIQUE;
//        }
//        return UserConstants.UNIQUE;
//    }
//
//    @Override
//    public String checkPhoneUnique(SysUser user) {
//        int count = baseMapper.selectList(new QueryWrapper<SysUser>().eq(SysUser.COL_ACCOUNT,user.getMobile())).size();
//        if (count > 0)
//        {
//            return UserConstants.NOT_UNIQUE;
//        }
//        return UserConstants.UNIQUE;
//    }
//}
//
//
//
//
